/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.utils;

import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

/**
 * Clase para guardar y consutlar las imagenes del application Web
 * @author jsanchez
 */
public abstract class UtilidadesImages {

    /**
     * Agrega las fotos al objeto application.
     * @param context
     * @param images
     * @param actualizar
     */
    public static void agregarFotos(FacesContext context, List<BeanImage> images, boolean actualizar){
        ServletContext application = (ServletContext)context.getExternalContext().getContext();
        Object obj = application.getAttribute(ImageApplication.class.getName());
        if(obj == null || !(obj instanceof ImageApplication)){
            obj = new ImageApplication();
            application.setAttribute(ImageApplication.class.getName(), (ImageApplication)obj);
        }
        ImageApplication img = (ImageApplication)obj;
        for(BeanImage image : images) {
            if( actualizar )
                img.getImages().put(image.getNombreFoto(), image);
            else if( !img.getImages().containsKey(image.getNombreFoto()) )
                img.getImages().put(image.getNombreFoto(), image);
        }
    }

    /**
     * Agrega las fotos al objeto application y siempre las actualizan.
     * @param context
     * @param images
     */
    public static void agregarFotos(FacesContext context, List<BeanImage> images){
        agregarFotos(context, images, true);
    }

    /**
     * Obtiene la imagen del FacesContext
     * @param context
     * @param foto
     * @return
     */
    public static BeanImage getImage(FacesContext context, String foto){
        ServletContext application = (ServletContext)context.getExternalContext().getContext();
        return getImage(application, foto);
    }

    /**
     * Obtiene la imagen del FacesContext
     * @param application
     * @param foto
     * @return
     */
    public static BeanImage getImage(ServletContext application, String foto){
        Object obj = application.getAttribute(ImageApplication.class.getName());
        BeanImage beanImage = null;
        if(obj != null && obj instanceof ImageApplication){
            ImageApplication img = (ImageApplication)obj;
            beanImage = img.getImages().get(foto);
        }
        return beanImage;
    }

    /**
     * Obtiene la List de BeanImage de la List de Muebles.
     * @param muebles
     * @return
     */
    public static List<BeanImage> getBeanImageFromMuebles(List<Mueble> muebles){
        List<BeanImage> beanImages = new ArrayList<BeanImage>();
        for(Mueble mueble : muebles){
            BeanImage bean = new BeanImage();
            bean.setNombreFoto(mueble.getFoto());
            bean.setImageBytes(mueble.getBytesFoto());
            beanImages.add(bean);
        }
        return beanImages;
    }
}
